package com.demo.core.dao.base;

import java.util.List;
import java.util.Map;

/**
 * 核心基础Dao接口
 * 基础Dao,实现一般的CURDs方法<br>
 * CURDs方法说明：
 * <ul>
 * <li>insert: 模型数据插入	</li>
 * <li>update: 模型数据更新,中T参数为要更新的模型参数,Map为更新条件</li>
 * <li>delete: 模型数据删除	</li>
 * <li>select: 模型检索,Map为检索条件 </li>
 * </ul>
 * @param <T> 序列化模型
 * @param <PK> 模型主键
 * @author ryuu.kk
 */
public interface BaseCoreDao<T, PK extends java.io.Serializable> {
	
	/**
	 * 插入方法：持久化模型对象
	 * @param t 模型T
	 * @return 主键ID
	 */
	Long insert(T t);
	
	/**
	 * 判断存在方法:判断对象是否存在
	 * @param id 对象模型的主键ID
	 * @return boolean
	 */
    boolean exists(PK id);
    
	/**
	 * 更新方法:使用对象模型T+更新参数Map,更新模型T
	 * @param t 模型T
	 * @param params 更新参数
	 * @return 成功更新条数
	 */
	int update(T t, Map<String, Object> params);
	
	/**
	 * 删除方法:使用Map参数删除对象模型
	 * @param params 删除条件
	 * @return 成功删除条数
	 */
	int delete(Map<String, Object> params);
	
	/**
	 * 删除方法:使用主键ID删除模型T
	 * @param id 删除的ID
	 * @return 成功操作数
	 */
	int delete(PK id);
	
	/**
	 * 查询方法:使用Map参数查询模型列表 
	 * @param params 参数
	 * @return 模型列表
	 */
	List<T> select(Map<String, Object> params);
	
	/**
	 * 查询方法:使用主键ID查询模型T
	 * @param id 代理主键ID
	 * @return 模型T
	 */
	T select(PK id);
}
